<!DOCTYPE html>
<html>
<head>
    <title>网络公式编辑器：语法说明</title>
    <meta charset="UTF-8"/>
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
    <script type="text/javascript" src="js/formulae.js"></script>
    <style type="text/css">
        #menu, #title, #subtitle, #author {text-align: center}
        body {font-family: Arial; background-color:beige}
        p,table {font-family: Times}
    </style>
</head>
<body>

<h2 id="title">
    网络公式编辑器：详细的语法说明
</h2>

<h4 id="subtitle">
    本工具语法的主要优点是：1、易于阅读，2、易于学习，3、易于输入
</h4>


<p>
    <b>语法：</b> 这是一个关于网络公式编辑器工作过程的语法分析，在下面的巴克斯-诺尔范式中， ::= 左边的字母
    可以代表其右边的单个或一系列字符串的集合，竖杠|表示分隔各类字符。
</p>

<pre>c ::= [A-z] | 数字 | 希腊字母 | 其它的常量符号
u ::= 'sqrt' | 'text' | 'bb' |     其它关于字体的一元算符
b ::= 'frac' | 'root' | 'stackrel' 二元算符
l ::= ( | [ | { | (: | {:          左半括号
r ::= ) | ] | } | :) | :}          右半括号
S ::= c | lEr | uS | bSS | "any"   简单表达式
E ::= SE | S/S |S_S | S^S | S_S^S  关系表达式 (小数，上下标)
</pre>

<p>
    <b>转换规则：</b> 每一个终结符和常量都会被转化为机器内部的唯一标识码，其它的关系表达式的转换规则如下：<br/>
</p>
<table>
    <tr><td>l`S`r</td><td>`to`</td><td>&lt;mrow>l`S`r&lt;/mrow> </td></tr>
    <tr><td>sqrt `S`</td><td>`to`</td><td>&lt;msqrt>`S'`&lt;/msqrt></td></tr>

    <tr><td>text `S`</td><td>`to`</td><td>&lt;mtext>`S'`&lt;/mtext></td></tr>
    <tr><td>"any"</td><td>`to`</td><td>&lt;mtext>any&lt;/mtext></td></tr>
    <tr><td>
        frac `S_1` `S_2`</td><td>`to`</td><td>&lt;mfrac>`S_1'` `S_2'`&lt;/mfrac>
    </td></tr>
    <tr><td>

        root `S_1` `S_2`</td><td>`to`</td><td>&lt;mroot>`S_2'` `S_1'`&lt;/mroot>
    </td></tr>
    <tr><td>
        stackrel `S_1` `S_2`</td><td>`to`</td><td>&lt;mover>`S_2'` `S_1'`&lt;/mover>
    </td></tr>
    <tr><td>
        `S_1`/`S_2`</td><td>`to`</td><td>&lt;mfrac>`S_1'` `S_2'`&lt;/mfrac>
    </td></tr>

    <tr><td>
        `S_1`_`S_2`</td><td>`to`</td><td>&lt;msub>`S_1` `S_2'`&lt;/msub>
    </td></tr>
    <tr><td>
        `S_1`^`S_2`</td><td>`to`</td><td>&lt;msup>`S_1` `S_2'`&lt;/msup>
    </td></tr>
    <tr><td>
        `S_1`_`S_2`^`S_3`</td><td>`to`</td>
        <td>&lt;msubsup>`S_1` `S_2'` `S_3'`&lt;/msubsup> or

            &lt;munderover>`S_1` `S_2'` `S_3'`&lt;/munderover> (in some cases)
        </td></tr>
</table>
注意：除非`S`与`S'`不在同一个优先级内，否则二者是没有区别的，前者如果`S`的优先级高于`S'`，表示`S'`是一个子表达式。

<p>
    <b>矩阵</b>矩阵的语法规则如下：
    <br/>
    <tt>l(`S_(11)`,...,`S_(1n)`),(...),(`S_(m1)`,...,`S_(mn)`)r</tt>
    &#x00A0; &#x00A0; or &#x00A0; &#x00A0;

    <tt>l[`S_(11)`,...,`S_(1n)`],[...],[`S_(m1)`,...,`S_(mn)`]r</tt>.
    <br/>

    这里的 <tt>l</tt> 和 <tt>r</tt> 就相当与左括号和右括号。 这些表达式都将转换成下面的形式：
    <br/>

    &lt;mrow>l&lt;mtable>&lt;mtr>&lt;mtd>`S_(11)`&lt;/mtd>...

    &lt;mtd>`S_(1n)`&lt;/mtd>&lt;/mtr>...
    &lt;mtr>&lt;mtd>`S_(m1)`&lt;/mtd>...
    &lt;mtd>`S_(mn)`&lt;/mtd>&lt;/mtr>&lt;/mtable>r&lt;/mrow>.
    <br/>

    例如：
    <tt>{(S_(11),...,S_(1n)),(vdots,ddots,vdots),(S_(m1),...,S_(mn))]</tt>
    的现实形式为： `{(S_(11),...,S_(1n)),(vdots,ddots,vdots),(S_(m1),...,S_(mn))]`.

    <br/>

    注意：矩阵的每一行应该具有相同的列数，并且一个矩阵的行数至少为两行。

<h4>
    下面列出常用的公式符号

</h4>


<p>
    希腊字母：
    alpha `alpha`
    beta `beta`
    chi `chi`
    delta `delta`
    Delta `Delta`
    epsilon `epsilon`
    varepsilon `varepsilon`
    eta `eta`
    gamma `gamma`
    Gamma `Gamma`
    iota `iota`
    kappa `kappa`
    lambda `lambda`
    Lambda `Lambda`
    mu `mu`
    nu `nu`
    omega `omega`
    Omega `Omega`
    phi `phi`
    varphi `varphi`
    Phi `Phi`
    pi `pi`
    Pi `Pi`
    psi `psi`
    Psi `Psi`
    rho `rho`
    sigma `sigma`
    Sigma `Sigma`
    tau `tau`
    theta `theta`
    vartheta `vartheta`
    Theta `Theta`
    upsilon `upsilon`
    xi `xi`
    Xi `Xi`
    zeta `zeta`
</p>
<center>
    <table border="5" cellpadding="10">
        <tr valign="top"><td>
            运算符号
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>+</td><td>`+`</td></tr>
                <tr><td>-</td><td>`-`</td></tr>

                <tr><td>*</td><td>`*`</td></tr>
                <tr><td>**</td><td>`**`</td></tr>
                <tr><td>//</td><td>`//`</td></tr>
                <tr><td>\\</td><td>`\\ `</td></tr>
                <tr><td>xx</td><td>`xx`</td></tr>
                <tr><td>-:</td><td>`-:`</td></tr>

                <tr><td>@</td><td>`@`</td></tr>
                <tr><td>o+</td><td>`o+`</td></tr>
                <tr><td>ox</td><td>`ox`</td></tr>
                <tr><td>o.</td><td>`o.`</td></tr>
                <tr><td>sum</td><td>`sum`</td></tr>
                <tr><td>prod</td><td>`prod`</td></tr>

                <tr><td>^^</td><td>`^^`</td></tr>
                <!--tr><td>^^^</td><td>`^^^`</td></tr-->
                <tr><td>vv</td><td>`vv`</td></tr>
                <!--tr><td>vvv</td><td>`vvv`</td></tr-->
                <tr><td>nn</td><td>`nn`</td></tr>
                <!--tr><td>nnn</td><td>`nnn`</td></tr-->

                <tr><td>uu</td><td>`uu`</td></tr>
                <!--tr><td>uuu</td><td>`uuu`</td></tr-->
            </table>
        </td><td>
            关系符
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>=</td><td>`=`</td></tr>
                <tr><td>!=</td><td>`!=`</td></tr>

                <tr><td>< </td><td>`<`</td></tr>
                <tr><td>></td><td>`>`</td></tr>
                <tr><td><=</td><td>`<=`</td></tr>
                <tr><td>>=</td><td>`>=`</td></tr>
                <tr><td>-<</td><td>`-<`</td></tr>

                <tr><td>>-</td><td>`>-`</td></tr>
                <tr><td>in</td><td>`in`</td></tr>
                <tr><td>!in</td><td>`notin`</td></tr>
                <tr><td>sub</td><td>`sub`</td></tr>
                <tr><td>sup</td><td>`sup`</td></tr>
                <tr><td>sube</td><td>`sube`</td></tr>

                <tr><td>supe</td><td>`supe`</td></tr>
                <tr><td>-=</td><td>`-=`</td></tr>
                <tr><td>~=</td><td>`~=`</td></tr>
                <tr><td>~~</td><td>`~~`</td></tr>
                <tr><td>prop</td><td>`prop`</td></tr>
            </table>
        </td><td>

            逻辑符
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>and</td><td>`and`</td></tr>
                <tr><td>or</td><td>`or`</td></tr>
                <tr><td>not</td><td>`not`</td></tr>
                <tr><td>=></td><td>`=>`</td></tr>

                <tr><td>if</td><td>`if`</td></tr>
                <tr><td>iff</td><td>`iff`</td></tr>
                <tr><td>AA</td><td>`AA`</td></tr>
                <tr><td>EE</td><td>`EE`</td></tr>
                <tr><td>_|_</td><td>`_|_`</td></tr>
                <tr><td>TT</td><td>`TT`</td></tr>

                <tr><td>|--</td><td>`|--`</td></tr>
                <tr><td>|==</td><td>`|==`</td></tr>
            </table>
            <p>
                括号
            </p>
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>(</td><td>`(`</td></tr>
                <tr><td>)</td><td>`)`</td></tr>

                <tr><td>[</td><td>`[`</td></tr>
                <tr><td>]</td><td>`]`</td></tr>
                <tr><td>{</td><td>`{`</td></tr>
                <tr><td>}</td><td>`}`</td></tr>
                <tr><td>(:</td><td>`(:`</td></tr>
                <tr><td>:)</td><td>`:)`</td></tr>

                <!--tr><td>{:</td><td>`{:`</td></tr-->
                <!--tr><td>:}</td><td>`{::}`</td></tr-->
            </table>

        </td><td>
            混合运算符
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>int</td><td>`int`</td></tr>

                <tr><td>oint</td><td>`oint`</td></tr>
                <tr><td>del</td><td>`del`</td></tr>
                <tr><td>grad</td><td>`grad`</td></tr>
                <tr><td>+-</td><td>`+-`</td></tr>
                <tr><td>O/</td><td>`O/`</td></tr>
                <tr><td>oo</td><td>`oo`</td></tr>

                <tr><td>aleph</td><td>`aleph`</td></tr>
                <tr><td>/_</td><td>`/_`</td></tr>
                <tr><td>:.</td><td>`:.`</td></tr>
                <tr><td>|...|</td><td>|`...`|</td></tr>
                <tr><td>|cdots|</td><td>|`cdots`|</td></tr>
                <tr><td>vdots</td><td>`vdots`</td></tr>

                <tr><td>ddots</td><td>`ddots`</td></tr>
                <tr><td>|\ |</td><td>|`\ `|</td></tr>
                <tr><td>|quad|</td><td>|`quad`|</td></tr>
                <tr><td>diamond</td><td>`diamond`</td></tr>
                <tr><td>square</td><td>`square`</td></tr>
                <!--tr><td>|__</td><td>`|__`</td></tr-->

                <!--tr><td>__|</td><td>`__|`</td></tr-->
                <!--tr><td>|~</td><td>`|~`</td></tr-->
                <!--tr><td>~|</td><td>`~|`</td></tr-->
                <tr><td>CC</td><td>`CC`</td></tr>
                <tr><td>NN</td><td>`NN`</td></tr>
                <tr><td>QQ</td><td>`QQ`</td></tr>

                <tr><td>RR</td><td>`RR`</td></tr>
                <tr><td>ZZ</td><td>`ZZ`</td></tr>
            </table>
        </td><td>
            标准函数
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>sin</td><td>`sin`</td></tr>
                <tr><td>cos</td><td>`cos`</td></tr>

                <tr><td>tan</td><td>`tan`</td></tr>
                <tr><td>csc</td><td>`csc`</td></tr>
                <tr><td>sec</td><td>`sec`</td></tr>
                <tr><td>cot</td><td>`cot`</td></tr>
                <tr><td>sinh</td><td>`sinh`</td></tr>
                <tr><td>cosh</td><td>`cosh`</td></tr>

                <tr><td>tanh</td><td>`tanh`</td></tr>
                <tr><td>log</td><td>`log`</td></tr>
                <tr><td>ln</td><td>`ln`</td></tr>
                <tr><td>det</td><td>`det`</td></tr>
                <tr><td>dim</td><td>`dim`</td></tr>
                <tr><td>lim</td><td>`lim`</td></tr>

                <tr><td>mod</td><td>`mod`</td></tr>
                <tr><td>gcd</td><td>`gcd`</td></tr>
                <tr><td>lcm</td><td>`lcm`</td></tr>
                <tr><td>min</td><td>`min`</td></tr>
                <tr><td>max</td><td>`max`</td></tr>
            </table>
            <p>

                强调符
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>hat x</td><td>`hat x`</td></tr>
                <tr><td>bar x</td><td>`bar x`</td></tr>
                <tr><td>ul x</td><td>`ul x`</td></tr>
                <tr><td>vec x</td><td>`vec x`</td></tr>

                <tr><td>dot x</td><td>`dot x`</td></tr>
                <tr><td>ddot x</td><td>`ddot x`</td></tr>
            </table>

        </td><td>
            箭头
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>uarr</td><td>`uarr`</td></tr>

                <tr><td>darr</td><td>`darr`</td></tr>
                <tr><td>rarr</td><td>`rarr`</td></tr>
                <tr><td>-></td><td>`->`</td></tr>
                <tr><td>|-></td><td>`|->`</td></tr>
                <tr><td>larr</td><td>`larr`</td></tr>
                <tr><td>harr</td><td>`harr`</td></tr>

                <tr><td>rArr</td><td>`rArr`</td></tr>
                <tr><td>lArr</td><td>`lArr`</td></tr>
                <tr><td>hArr</td><td>`hArr`</td></tr>
            </table>
            <p>
                花体字母
            <table border="5" cellpadding="10">
                <tr><th>输入</th><th>输出</th></tr>
                <tr><td>bb A</td><td>`bb A`</td></tr>

                <tr><td>bbb A</td><td>`bbb A`</td></tr>
                <tr><td>cc A</td><td>`cc A`</td></tr>
                <tr><td>tt A</td><td>`tt A`</td></tr>
                <tr><td>fr A</td><td>`fr A`</td></tr>
                <tr><td>sf A</td><td>`sf A`</td></tr>
            </table>

        </td></tr>
    </table>
</center>
<center>
    <p>
        <b><font color="red">下面是较为常见的例子</font> </b>
    </p>
    <table id="examples" border="5" cellpadding="10">
        <tr>
            <th>源代码</th>
            <th>公式样式</th>
            <th>说明</th>
        </tr>

        <tr>
            <td>\`x^2+y_1+z_12^34\`</td>
            <td>`x^2+y_1+z_12^34`</td>
            <td>上标和下标</td>
        </tr>

        <tr>
            <td>\`sin^-1(x)\`</td>
            <td>`sin^-1(x)`</td>
            <td>正弦</td>
        </tr>

        <tr>
            <td>\`d/dxf(x)=lim_(h->0)(f(x+h)-f(x))/h\`</td>
            <td>`d/dxf(x)=lim_(h->0)(f(x+h)-f(x))/h`</td>
            <td>微分</td>
        </tr>

        <tr>
            <td>\`f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n\`</td>
            <td>`f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n`</td>
            <td>求和</td>
        </tr>

        <tr>
            <td>\`int_0^1f(x)dx\`</td>
            <td>`int_0^1f(x)dx`</td>
            <td>积分，下标必须出现在上标之前</td>
        </tr>

        <tr>
            <td>\`[[a,b],[c,d]]((n),(k))\`</td>
            <td>`[[a,b],[c,d]]((n),(k))`</td>
            <td>矩阵</td>
        </tr>

        <tr>
            <td>\`x/x={(1,if x!=0),(text{undefined},if x=0):}\`</td>
            <td>`x/x={(1,if x!=0),(text{undefined},if x=0):}`</td>
            <td>不等式，类似矩阵的定义</td>
        </tr>

        <tr>
            <td>\`a//b\`</td>
            <td>`a//b`</td>
            <td>横排除式</td>
        </tr>

        <tr>
            <td>\`(a/b)/(c/d)\`</td>
            <td>`(a/b)/(c/d)`</td>
            <td>竖排除式</td>
        </tr>

        <tr>
            <td>\`a/b/c/d\`</td>
            <td>`a/b/c/d`</td>
            <td>只含除的混合排除式</td>
        </tr>

        <tr>
            <td>\`((a*b))/c\`</td>
            <td>`((a*b))/c`</td>
            <td>含乘除的混合排除式</td>
        </tr>

        <tr>
            <td>\`sqrt sqrt root3x\`</td>
            <td>`sqrt sqrt root3x`</td>
            <td>多阶根式</td>
        </tr>

        <tr>
            <td>\`<< a,b >> and {:(x,y),(u,v):}\`</td>
            <td>`<< a,b >> and {:(x,y),(u,v):}`</td>
            <td>尖括号和隐式矩阵</td>
        </tr>

        <tr>
            <td>\`(a,b]={x in RR | a < x <= b}\`</td>
            <td>`(a,b]={x in RR | a < x <= b}`</td>
            <td>复杂关系式</td>
        </tr>

        <tr>
            <td style="height: 39px">\`abc-123.45^-1.1\`</td>
            <td style="height: 39px">`abc-123.45^-1.1`</td>
            <td style="height: 39px">常变量混合表达式</td>
        </tr>

        <tr>
            <td style="height: 40px">\`hat(ab) bar(xy) ulA vec v dotx ddot y\`</td>
            <td style="height: 40px">`hat(ab) bar(xy) ulA vec v dotx ddot y`</td>
            <td style="height: 40px">常量和变量强调符表达式</td>
        </tr>

        <tr>
            <td>\`bb{AB3}.bbb(AB].cc(AB).fr{AB}.tt[AB].sf(AB)\`</td>
            <td>`bb{AB3}.bbb(AB].cc(AB).fr{AB}.tt[AB].sf(AB)`</td>
            <td>花体字符</td>
        </tr>

        <tr>
            <td>\`stackrel"def"= or \stackrel{\Delta}{=}" "("or ":=)\`</td>
            <td>`stackrel"def"= or \stackrel{\Delta}{=}" "("or ":=)`</td>
            <td>运算符强调符</td>
        </tr>

        <tr>
            <td>\`{::}_(\ 92)^238U\`</td>
            <td>`{::}_(\ 92)^238U`</td>
            <td>化学表达式</td>
        </tr>
    </table>


</center>
</body>
</html>
